home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
17 Bit Software 6: Level 6
/
17 Bit - Level 6 (1998)(Epic Marketing)[!].iso
/
quartz
/
q1073.dms
/
q1073.adf
/
CCONVERT.LHA
/
CConvert
/
CConvert1.82.s
< prev
next >
Wrap
Text File
|
1993-04-14
|
21KB
|
906 lines
*
* CConvert V1.82 © '92 CLAUDE
*
* Purpose.........: CConvert will convert an IFF file to raw bitplane datas
* Usage...........: CConvert [FROM] <iffpic> [[TO] <rawpic>] [COLORS]
* [INTERLEAVED|IL] [LINK] [MODE] [SPRITE]
*
* Author..........: Klaus Wissmann
* Version.........: V1.82
* Requirements....: OS1.2 or higher
* arp.library
*
* Revision History: V1.6 first released version
* V1.7 added Sprite support
* V1.8 added link mode
* V1.81 some bug fixes
* V1.82 added patternmatching, some bug fixes
*
*
* (sorry, all the comments are in german...)
*
*
opt o+,ow+
incdir "Include:"
include exec/exec_lib.i
include exec/memory.i
include exec/strings.i
include libraries/arpbase.i
include libraries/dosextens.i
* Ein paar eigene Definitionen...
ID_FORM equ "FORM"
rsreset
FORM_id rs.l 1
FORM_Length rs.l 1
FORM_Type rs.l 1
FORM_Data rs.l 1
rsreset
Chunk_id rs.l 1
Chunk_Length rs.l 1
Chunk_Data rs.l 1
FORM_ILBM equ "ILBM"
ID_BMHD equ "BMHD"
ID_BODY equ "BODY"
ID_CAMG equ "CAMG"
ID_CMAP equ "CMAP"
ID_SPRT equ "SPRT"
rsreset
BMHD_id rs.l 1
BMHD_Length rs.l 1
BMHD_Width rs.w 1
BMHD_Height rs.w 1
BMHD_LeftEdge rs.w 1
BMHD_TopEdge rs.w 1
BMHD_Depth rs.b 1
BMHD_Masking rs.b 1
BMHD_Compression rs.b 1
BMHD_pad1 rs.b 1
BMHD_transparentColor rs.w 1
BMHD_xAspect rs.b 1
BMHD_yAspect rs.b 1
BMHD_pageWidth rs.w 1
BMHD_pageHeight rs.w 1
cmp_None equ 0
cmp_ByteRun1 equ 1
rsreset
CMAP_red rs.b 1
CMAP_green rs.b 1
CMAP_blue rs.b 1
rsreset
CAMG_id rs.l 1
CAMG_Length rs.l 1
CAMG_ViewModes rs.l 1
rsreset
BODY_id rs.l 1
BODY_Length rs.l 1
BODY_Data rs.l 1
hunk_unit equ $3e7
hunk_name equ $3e8
hunk_data equ $3ea
hunk_ext equ $3ef
hunk_end equ $3f2
chip equ $40000000
ext_def equ $01000000
CSI equ $9b
section main,code
start RESIDENT 4000,(data_SIZE+text_SIZE),diskloaded
move.b #1,colorcount(a4) dieses ganze Zeug am Anfang ist nur
moveq #108,d1 dazu da, um uns mit Arp's ARes resi-
move.l d1,os_MyAP+ap_Length(a4) dent machen zu können
lea data_SIZE(a4),a3
lea textstart(pc),a2
move.l #text_SIZE-1,d1
copytext
move.b (a2)+,(a3)+
dbf d1,copytext
bra.s notdiskld
diskloaded
lea Datas(pc),a4
notdiskld
movem.l d0/a0,-(sp)
sub.l a1,a1 als allererstes müssen wir sicher
move.l (_SysBase).w,a6 sein, daß wir auch aus einem CLI ge-
SYSCALL FindTask startet wurden, ansonsten müssen wir
move.l d0,a2 das Programm ordnungsgemäß beenden
tst.l pr_CLI(a2)
bne.s fromCLI
movem.l (sp)+,d0/a0
lea pr_MsgPort(a2),a0
SYSCALL WaitPort
lea pr_MsgPort(a2),a0
SYSCALL GetMsg
move.l d0,d2
SYSCALL Forbid
move.l d2,d0
SYSCALL ReplyMsg
rts
fromCLI
sub.l a5,a5
moveq #RETURN_FAIL,d7
lea arpname(pc),a1
moveq #39,d0
SYSCALL OpenLibrary
move.l d0,_ArpBase(a4)
bne.s okgo
lea dosname(pc),a1 war es nicht möglich, die arp.library
SYSCALL OpenLibrary zu öffnen, wird versucht über die
tst.l d0 dos.library eine Meldung auszugeben
beq.s nodos >alles Fehlgeschlagen,lieber aufhören
move.l d0,a6
SYSCALL Output
move.l d0,d1
beq.s nodos
lea noarpmsg(pc),a0
move.l a0,d2
moveq #noarplength,d3
SYSCALL Write
nodos addq.l #8,sp
rts
okgo move.l d0,a6
movem.l (sp)+,d0/a0 Parameter zurückhohlen
lea help(pc),a1 Argumentzeile auswerten
lea oldPos(a4),a2
lea Args(pc),a3
SYSCALL GADS
tst.l d0
bpl.s openfile
move.l oldPos(a4),a1 GADS hat einen Fehler zurückgegeben,
SYSCALL Puts als geben wir diesen aus und verab-
moveq #RETURN_ERROR,d7 schieden uns
moveq #ERROR_LINE_TOO_LONG,d2
bra nomsg
openfile
lea missrcfile(pc),a5 GADS meldet leider keinen Fehler,
moveq #RETURN_ERROR,d7 falls überhaupt keine Parameter ange-
move.l oldPos(a4),d0 geben wurden, obwohl wir ja mindes-
beq closelib tens einen benötigen (FROM/A)
lea os_nosrcfile(a4),a5 da wir Patternmatching unterstützen,
lea os_MyAP(a4),a3 müssen wir erst mal nach einem pas-
move.l a3,a0 senden Eintrag suchen
SYSCALL FindFirst
cmp.b #ERROR_NO_MORE_ENTRIES,d0
bne.s dontchange
move.b #ERROR_OBJECT_NOT_FOUND,d0
dontchange
move.b d0,-1(a5)
bne closelib
lea ap_Buf(a3),a0 haben wir einen gefunden, geben wir
SYSCALL BaseName dessen Namen auch aus, damit der
lea readsrc(pc),a0 User auch weis, was wir gerade bear-
lea os_readsrcstr(a4),a1 beiten
move.l d0,(a1)
SYSCALL Printf
lea ap_Buf(a3),a0 eigentlich gibt FindFirst() ja einen
move.l a0,d1 FileInfoBlock zurück, leider ist
moveq #ACCESS_READ,d2 dies nicht immer der des gewünschten
SYSCALL ArpLock Files, sondern (falls z.B. das
move.l d0,d1 Directory schon abgekürzt wurde) auch
beq errorfromdos manchmal den eines Parentdirs. Des-
lea os_MyFIB(a4),a2 halb müssen wir uns eben unseren
move.l a2,d2 FileInfoBlock selber besorgen
SYSCALL Examine
tst.l d0
beq errorfromdos
lea nomem(pc),a5 bevor wir das IFF-File einlesen kön-
moveq #RETURN_FAIL,d7 nen brauchen wir erst mal einen aus-
move.l fib_Size(a2),d0 reichend großen Speicherbereich
move.l d0,d4
moveq #0,d1
SYSCALL ArpAllocMem
move.l d0,d6
beq closelib
lea os_nosrcfile(a4),a5 jetzt müssen wir die Datei eigentlich
moveq #RETURN_ERROR,d7 nur noch öffnen und einlesen
lea ap_Buf(a3),a1
move.l a1,d1
move.l #MODE_OLDFILE,d2
SYSCALL ArpOpen
move.l d0,d1
beq errorfromdos
move.l d6,d2
move.l d4,d3
lea os_nosrcdata(a4),a5
SYSCALL Read
tst.l d0
bmi errorfromdos
cmp.l d4,d0
bne closelib
lea noiff(pc),a5 wir müssen schon sicher sein, ob es
move.l d6,a2 sich überhaupt um ein IFF ILBM File
cmp.l #ID_FORM,FORM_id(a2) handelt, deshalb machen wir ein paar
bne closelib kleine Tests
lea corruptiff(pc),a5
move.l FORM_Length(a2),d1
addq.l #8,d1
cmp.l d1,d0
bcs closelib
beq.s hascorrectlength
move.l d1,d4
lea file2long(pc),a1
SYSCALL Puts
hascorrectlength
lea noilbm(pc),a5
cmp.l #FORM_ILBM,FORM_Type(a2)
bne closelib
* auswerten
lea os_printchunk(a4),a3 im nächsten Programmteil schauen wir
lea os_insclaenge(a4),a5 uns erstmal genauer an, wo die
lea FORM_Data(a2),a2 Chunks eigentlich liegen;die Anfangs-
add.l d4,d6 adressen der Chunks speichern wir in
getnextchunk *den jeweiligen Variablen
move.l Chunk_Length(a2),d5 Länge des Chunks
move.l Chunk_id(a2),d4 Name des Chunks
cmp.l #ID_BMHD,d4 ab hier wird solange verglichen, bis
bne.s nobmhd der richtige Chunk gefunden ist
move.l a2,BMHDpos(a4)
bra.s foundChunk
nobmhd cmp.l #ID_CMAP,d4
bne.s nocmap
move.l a2,CMAPpos(a4)
bra.s foundChunk
nocmap cmp.l #ID_BODY,d4
bne.s nobody
move.l a2,BODYpos(a4)
bra.s foundChunk
nobody cmp.l #ID_CAMG,d4
bne.s nocamg
move.l a2,CAMGpos(a4)
bra.s foundChunk
nocamg cmp.l #ID_SPRT,d4
bne.s nosprt
move.l a2,SPRTpos(a4)
moveq #-1,d0
move.l d0,sSPRITE(a4)
nosprt
foundChunk
move.l d4,(a3) wir wollen ja auch ein bißchen User-
move.l a3,a0 freundlich sein; deshalb zeigen wir
move.l d5,(a5) alle Chunks mitsamt ihrer Länge an
move.l a5,a1
SYSCALL Printf
addq.l #1,d5
and.b #%11111110,d5
add.l d5,a2 jetzt springen wir zum Anfang des
lea Chunk_Data(a2),a2 nächsten Chunks und fangen von vorne
cmp.l d6,a2 an
bcs.s getnextchunk
lea misbody(pc),a5
tst.l BODYpos(a4)
beq closelib
lea misbmhd(pc),a5 jetzt müssen wir erst mal den
tst.l BMHDpos(a4) BitMapHeaDer auswerten, damit wir die
beq closelib ganze Sache auch richtig konvertieren
move.l BMHDpos(a4),a2 können
move.w BMHD_pageWidth(a2),ScreenBreite(a4)
move.w BMHD_pageHeight(a2),ScreenHoehe(a4)
moveq #0,d0
move.w BMHD_Width(a2),d0 zuerste lesen wir die Breite der
move.w d0,os_insbreite1(a4) Grafik aus...
add.w #15,d0 ...die müssen wir dann in Bytes um-
and.b #%11110000,d0 wandeln, außerdem muß der Wert an
lsr.w #3,d0 einer Wortgrenze liegen
move.w d0,Breite(a4)
move.w d0,os_insbreite2(a4)
move.w BMHD_Height(a2),d2 die Höhe brauchen wir auch noch ...
mulu d2,d0
move.w d2,Hoehe(a4)
move.w d2,os_inshoehe(a4)
move.l d0,d6
moveq #0,d2
move.b BMHD_Depth(a2),d2 und die Tiefe könnte auch nicht
move.b d2,Tiefe(a4) schaden
move.w d2,os_instiefe(a4)
mulu d2,d0
subq.b #1,d2 bei nur einer Plane müssen wir das
bne.s plural 's' rausradieren
move.b #" ",os_insplural(a4)
plural move.l d0,os_inslaenge(a4)
move.l d0,PlBufLength(a4) jetzt brauch wir jede Menge Speicher
moveq #0,d1 zum einen einen Block für die ent-
SYSCALL ArpAllocMem packten, noch nicht konvertierten
lea nomem(pc),a5 Daten ...
moveq #RETURN_FAIL,d7
move.l d0,PlaneBuffer(a4)
beq closelib
move.l PlBufLength(a4),d0
add.l #200,d0 und dann noch einmal Speicher für die
move.l #MEMF_CLEAR,d1 endgültigen Daten; der 2. Block muß
SYSCALL ArpAllocMem etwas länger sein, um auch die Daten
move.l d0,DestBuffer(a4) für Link-/Sprite-Mode aufzunehmen
move.l d0,realStart(a4)
beq closelib
tst.l labelPos(a4)
beq.s normMode
lea header(pc),a0 soll ein Object-File erzeugt werden,
move.l d0,a1 muß vor die eigentlichen Daten der
moveq #(headerlength/4)-1,d1 ganze hunk-Ramsch geschrieben werden
copyheader
move.l (a0)+,(a1)+
dbf d1,copyheader
move.l a1,PosSave(a4)
lea 4(a1),a1
move.l a1,DestBuffer(a4)
normMode
move.b BMHD_Compression(a2),d0 sollte das Bild mit einem anderen
move.b d0,comp(a4) Packalgorythmus als dem ByteRun1 ge-
beq.s nocompression packt worden sein (gibt's sowas über-
lea wrongcompress(pc),a5 haupt schon?), so muß CConvert leider
moveq #RETURN_ERROR,d7 passen
subq.b #1,d0
bne closelib
move.b #LF,os_longdata(a4)
nocompression
lea os_picdata(a4),a0 jetzt ist es endlich soweit: der
lea os_insbreite1(a4),a1 ganze vorbereitete Text wird ausgege-
SYSCALL Printf ben
move.l BODYpos(a4),a1 jetzt können wir uns endlich dem
move.l Chunk_Length(a1),d5 BODY-Chunk widmen
lea BODY_Data(a1),a1
move.l PlaneBuffer(a4),a3
move.l PlBufLength(a4),d0
tst.l sSPRITE(a4) wenn wir eine Sprite-Datenliste er-
beq.s testileaved zeugen sollen läuft die Sache ganz
convsprite *anders ab
move.l DestBuffer(a4),a3
lea wrongdim(pc),a5
moveq #2,d1
cmp.w Breite(a4),d1
bne closelib
cmp.b Tiefe(a4),d1
bne.s fourcolsprite
addq.l #4,os_inslaenge(a4)
clr.l (a3)+ bei 4-farbigen Sprite ist die Sache
lsr.l #2,d0 ziemlich einfach, da ein Sprite ja
subq.l #1,d0 auch "interleaved" aufgebaut ist
copysprite
move.l (a1)+,(a3)+
dbf d0,copysprite
move.l a3,DestBuffer(a4)
bra dspmodes
fourcolsprite
cmp.b #4,Tiefe(a4)
bne closelib
addq.l #8,os_inslaenge(a4)
lsr.l d0 beim 16-farbigen Sprite ist es etwas
move.l d0,d1 schwieriger, da wir zwei Sprites er-
lea os_insoffset(a4),a0 zeugen müssen; damit der User auch
movem.l d0-d1,(a0) weis, wo sich das zweite Sprite be-
clr.l (a3)+ findet, wird der Offset ausgegeben
lea (a3,d0),a0
clr.l (a0)+
lsr.l #2,d0
subq.l #1,d0
copy4sprite
move.l (a1)+,(a3)+
move.l (a1)+,(a0)+
dbf d0,copy4sprite
move.l a0,DestBuffer(a4)
lea sproffset(pc),a0
lea os_insoffset(a4),a1
SYSCALL Printf
bra dspmodes
testileaved
tst.l sILEAVED(a4) wurde INTERLEAVED angegeben, müssen
beq.s testcomp wir die Daten nur entpacken
move.l DestBuffer(a4),a3
add.l d0,DestBuffer(a4)
testcomp
tst.b comp(a4) gepackt ?
bne.s depackstart
subq.l #1,d0
unpacked
move.b (a1)+,(a3)+
dbf d0,unpacked
bra.s separate
depackstart
move.l a3,a0
add.l d0,a0
depack
cmp.l a0,a3 Daten entpacken
bcc.s separate
moveq #0,d2
move.b (a1)+,d2
bpl.s copyloop
cmp.b #-128,d2
beq.s depack
neg.b d2
depackloop
move.b (a1),(a3)+
dbf d2,depackloop
lea 1(a1),a1
bra.s depack
copyloop
move.b (a1)+,(a3)+
dbf d2,copyloop
bra.s depack
separate
tst.l sILEAVED(a4)
bmi.s dspmodes
move.l PlaneBuffer(a4),a3 es ist eine ganz schöne Arbeit, die
move.l DestBuffer(a4),a6 Daten in das RAW-Format zu konver-
move.w Hoehe(a4),d3 tieren
subq.w #1,d3
move.w Breite(a4),d4
subq.w #1,d4
move.l d6,d1
sub.w Breite(a4),d1
moveq #0,d0
move.b Tiefe(a4),d0
mulu d0,d6
sub.w Breite(a4),d6
newline moveq #0,d0
move.b Tiefe(a4),d0
subq.b #1,d0
nextplane
move.l d4,d2
copyline
move.b (a3)+,(a6)+
dbf d2,copyline zuerst eine Zeile kopieren,
add.l d1,a6 dann die nächste Plane
dbf d0,nextplane alle Planes kopieren
sub.l d6,a6
dbf d3,newline alle Zeilen kopieren
move.l _ArpBase(a4),a6
move.l PlBufLength(a4),d0
add.l d0,DestBuffer(a4)
dspmodes
tst.l sMODE(a4) hier werden noch ein paar Daten über
beq.s dspcmap den verwendeten Bildschirm ausgege-
move.w ScreenBreite(a4),os_inspw(a4) ben
move.w ScreenHoehe(a4),os_insph(a4)
tst.l CAMGpos(a4) wenn ein CAMG-Chunk vorhanden ist,
beq.s printscreen können wir viel mehr erzählen...
move.l CAMGpos(a4),a2
move.l CAMG_ViewModes(a2),d4
cmp.b #6,Tiefe(a4)
bne.s getres
lea ham(pc),a1
btst #11,d4
bne.s insertmode
lea dualpf(pc),a1
btst #10,d4
bne.s insertmode
lea ehb(pc),a1
insertmode
move.l a1,os_insmode(a4)
getres
lea hires(pc),a1
btst #15,d4
bne.s testmed
lea interlace(pc),a1
btst #2,d4
bne.s printresolution
lea lores(pc),a1
bra.s printresolution
testmed btst #2,d4
bne.s printresolution
lea medres(pc),a1
printresolution
move.l a1,os_insres(a4)
printscreen
lea scrform(pc),a0
lea os_inspw(a4),a1
SYSCALL Printf
dspcmap
tst.l sCOLORS(a4) wenn es gewünscht wird, geben wir
beq.s writeback auch noch die Farbtabelle aus
tst.l CMAPpos(a4)
bne.s cmapfound
lea miscmap(pc),a1
SYSCALL Puts
bra.s writeback
cmapfound
move.l CMAPpos(a4),a2
move.l Chunk_Length(a2),d5
moveq #30,d1
cmp.l d1,d5
bcs.s dispcols
addq.b #1,os_stellen(a4)
cmp.l #300,d5
bcs.s dispcols
addq.b #1,os_stellen(a4)
dispcols
lea Chunk_Data(a2),a2
convcol moveq #0,d2
move.b CMAP_red(a2),d2 ROT-Anteil
lsl.w #4,d2
move.b CMAP_blue(a2),d2 BLAU-Anteil
lsr.b #4,d2
or.b CMAP_green(a2),d2 GRÜN-Anteil
move.w d2,os_inswert(a4)
subq.b #1,colorcount(a4)
bne.s nolf
move.b #4,colorcount(a4)
sub.l a1,a1
SYSCALL Puts
nolf
lea farbe(pc),a0
lea os_insnum(a4),a1
SYSCALL Printf
addq.w #1,os_insnum(a4)
lea 3(a2),a2 zur nächsten Farbe
subq.l #3,d5
bne.s convcol
sub.l a1,a1
SYSCALL Puts
writeback
lea rawlength(pc),a0
lea os_inslaenge(a4),a1
SYSCALL Printf
move.l labelPos(a4),d0 schlußendlich müssen wir das ganze
beq.s saveitnow auch noch abspeichern
move.l DestBuffer(a4),d1 wenn wir uns im Link-Mode befinden,
addq.l #3,d1 müssen wir den ganzen Overhead davor
and.b #%11111100,d1 bzw. dahinter noch vervollständigen
move.l d1,a1
move.l PosSave(a4),a0
sub.l a0,d1
lsr.l #2,d1
subq.l #1,d1
move.l d1,(a0)
move.l #hunk_ext,(a1)+
move.l a1,a2
lea 4(a2),a2
move.l d0,a0
moveq #2,d0
copyname
addq.b #1,d0
move.b (a0)+,(a2)+
bne.s copyname
and.b #%11111100,d0
lea 12(a1,d0),a2
lsr.b #2,d0
or.l #ext_def,d0
move.l d0,(a1)
move.l #hunk_end,(a2)+
sub.l realStart(a4),a2
move.l a2,PlBufLength(a4)
saveitnow
lea done(pc),a5 das ganze wird jetzt noch auf Disk
moveq #RETURN_OK,d7 gebannt, wurde kein Zielfile angege-
move.l newPos(a4),d1 ben, war die ganze Arbeit eigentlich
beq.s closelib umsonst
lea os_nodestfile(a4),a5
moveq #RETURN_ERROR,d7
move.l #MODE_NEWFILE,d2
SYSCALL ArpOpen
move.l d0,d4
beq.s errorfromdos
lea writedest(pc),a1
SYSCALL Puts
lea os_nodestdata(a4),a5 die Länge des Files muß noch berech-
move.l realStart(a4),d2 net werden, da sie je nach verwende-
move.l PlBufLength(a4),d3 ten Modus sehr verschieden sein kann
tst.l sSPRITE(a4)
beq.s nospr
move.b Tiefe(a4),d0
lsl.b d0
add.l d0,d3
nospr
move.l d4,d1
SYSCALL Write
tst.l d0
bmi.s errorfromdos
moveq #RETURN_OK,d7
lea done(pc),a5
bra.s closelib
errorfromdos
SYSCALL IoErr ist ein Fehler bei einem dos.library
tst.b d0 Aufruf entstanden, wird auch noch
beq.s closelib Result2 geholt
move.b d0,-1(a5)
closelib
moveq #0,d2 außerdem wird noch die passende
cmp.l d2,a5 Fehlermeldung dazu ausgegeben
beq.s nomsg
move.l a5,a1
SYSCALL Puts
move.b -1(a5),d2
nomsg
move.l d7,d0
SYSCALL ArpExit
* Texte
dosname DOSNAME
noarpmsg dc.b "you need "
arpname ArpName
dc.b " V39+",CR,LF
noarplength equ *-noarpmsg
cnop 0,4
header dc.l hunk_unit,(endofmod-*-8)/4
dc.b "Graphic_MODULE"
cnop 0,4
endofmod dc.l hunk_name,(endofname-*-8)/4
dc.b "Graphic-Datas"
cnop 0,4
endofname dc.l chip!hunk_data
headerlength equ *-header
* Normale Texte
help dc.b LF,CSI,"0;33mCConvert",CSI,"0;39m V1.82 © '92 by "
dc.b CSI,"1;32mKlaus Wissmann",CSI,"0;39m",CR,LF,LF
dc.b "Usage: CConvert [FROM] <iffpic> [[TO] <rawfile>] "
dc.b "[LINK label]",CR,LF
dc.b " [COLORS] [INTERLEAVED|IL] [MODE] "
dc.b "[SPRITE]",CR,LF,LF
dc.b CSI,"1m FROM",CSI,"0m"
dc.b " - an IFF picture which should be converted",CR,LF
dc.b CSI,"1m TO",CSI,"0m"
dc.b " - this file will be created",CR,LF
dc.b CSI,"1m LINK",CSI,"0m"
dc.b " - specifies a label for link mode (see manual)",CR
dc.b LF,LF
dc.b CSI,"1m COLORS",CSI,"0m"
dc.b " - print out colortable",CR,LF
dc.b CSI,"1m INTERLEAVED",CSI,"0m"
dc.b " - keep the interleaved format and "
dc.b "just depack if necessary",CR,LF
dc.b CSI,"1m MODE",CSI,"0m"
dc.b " - print out screensize and viewmodes",CR,LF
dc.b CSI,"1m SPRITE",CSI,"0m"
dc.b " - convert to sprite data list",CR,LF
dc.b 0
Args dc.b "FROM/A,TO,LINK/K,COLORS/S,IL=INTERLEAVED/S,MODE/S,"
dc.b "SPRITE/S",0
dc.b ERROR_LINE_TOO_LONG
missrcfile dc.b "Required argument missing",0
readsrc dc.b LF,"Reading file '%s'.",CR,LF,LF,0
file2long dc.b "Corrupt IFF File - Additional data not recognized!"
dc.b LF,0
corruptiff dc.b "Corrupt IFF File !",0
dc.b ERROR_OBJECT_WRONG_TYPE
noiff dc.b "Not an IFF File !",0
dc.b ERROR_OBJECT_WRONG_TYPE
noilbm dc.b "File is IFF but not ILBM type !",0
dc.b ERROR_NO_FREE_STORE
nomem dc.b "Can't allocate memory !",0
misbmhd dc.b "Missing BMHD-Chunk !!!",0
wrongcompress dc.b "Compression mode not recognized !",0
misbody dc.b "Missing BODY-Chunk !!!",0
lores dc.b " Lo-Res",0
medres dc.b " Med-Res",0
interlace dc.b " interlaced",0
hires dc.b " Hi-Res",0
ham dc.b " Hold and Modify",0
dualpf dc.b " Dual-Playfield",0
ehb dc.b " Extra-Halfbright",0
scrform dc.b CR,LF,"Screen format: %d x %d pixel%s%s screen."
dc.b CR,LF,0
wrongdim dc.b "Wrong dimension for a sprite !",0
sproffset dc.b CR,LF,"Sprite 2 can be adressed at offset "
dc.b "%ld / 0x%lx.",CR,LF,0
miscmap dc.b "No colormap available !",0
rawlength dc.b LF,"Size in all: %ld bytes",CR,LF,0
writedest dc.b LF,"Writing to destination file.",LF,0
done dc.b LF,"Done.",0
* Daten
cnop 0,4
Datas dc.l 0
dc.l 0
dc.l 0
dc.l 0
dc.l 0
dc.l 0
dc.w 0
dc.w 0
dc.b 0
dc.b -1
dc.b 1
dc.b 0
ds.l 7
ds.l 5
dc.w 0
dc.w 0
rsreset
_ArpBase rs.l 1
PlaneBuffer rs.l 1 Zeiger auf ersten Speicherblock
realStart rs.l 1 Zeiger auf zweiten Speicherblock
DestBuffer rs.l 1 momentante Position im 2. Puffer
PlBufLength rs.l 1 Länge der erzeugten Daten
PosSave rs.l 1 hier wird die Länge des Hunks eingetragen
Breite rs.w 1 die Dimensionen des Bildes
Hoehe rs.w 1
Tiefe rs.b 1
masking rs.b 1
colorcount rs.b 1
comp rs.b 1 Compression-Mode
oldPos rs.l 1 Array für GADS: zuerst die Zeiger auf Source
newPos rs.l 1 und Zielfile
labelPos rs.l 1 Zeiger auf Label für Link-Mode
sCOLORS rs.l 1 und dann die restlichen Schlüsselwörter
sILEAVED rs.l 1
sMODE rs.l 1
sSPRITE rs.l 1
BMHDpos rs.l 1 Positionen der benötigten Chunks
CMAPpos rs.l 1
BODYpos rs.l 1
CAMGpos rs.l 1
SPRTpos rs.l 1
ScreenBreite rs.w 1
ScreenHoehe rs.w 1
data_SIZE rs.w 0
* Zu verändernde Texte / Daten-Strukturen
textstart
MyAP dc.l 0 ap_Base
dc.l 0 ap_Last
dc.l 0 ap_BreakBits
dc.l 0 ap_FoundBreak
dc.l 108 ap_Length
ds.b fib_SIZEOF ap_Info
ds.b 108 ap_Buf
MyFIB ds.b fib_SIZEOF
readsrcstr dc.l 0
insclaenge dc.l 0
insbreite1 dc.w 0
insbreite2 dc.w 0
inshoehe dc.w 0
instiefe dc.w 0
inslaenge dc.l 0
insoffset dc.l 0,0
inspw dc.w 0
insph dc.w 0
insmode dc.l 0
insres dc.l 0
insnum dc.w 0
inswert dc.w 0
even
dc.b ERROR_OBJECT_NOT_FOUND
nosrcfile dc.b "Can't open source file !",0
dc.b 0
nosrcdata dc.b "Can't read source file !",0
even
printchunk dc.b "XXXX %6ld",CR,LF,0
picdata dc.b CR,LF,"Width : %3d pixel",CR,LF
dc.b " %3d bytes",CR,LF
dc.b "Height: %3d lines",CR,LF
dc.b "Depth : %3d plane"
insplural dc.b "s",CR,LF
longdata dc.b 0,"This file was compressed using ByteRun1.",CR,LF
dc.b 0
farbe dc.b "Color %"
stellen dc.b "1d: $%04x ",0
dc.b 0
nodestfile dc.b "Can't open destination file !",0
dc.b 0
nodestdata dc.b "Can't write to destionation file !",0
text_SIZE equ *-textstart
* Offsets
os_MyAP equ MyAP-Datas
os_MyFIB equ MyFIB-Datas
os_readsrcstr equ readsrcstr-Datas
os_insclaenge equ insclaenge-Datas
os_insbreite1 equ insbreite1-Datas
os_insbreite2 equ insbreite2-Datas
os_inshoehe equ inshoehe-Datas
os_instiefe equ instiefe-Datas
os_inslaenge equ inslaenge-Datas
os_insoffset equ insoffset-Datas
os_inspw equ inspw-Datas
os_insph equ insph-Datas
os_insmode equ insmode-Datas
os_insres equ insres-Datas
os_insnum equ insnum-Datas
os_inswert equ inswert-Datas
os_nosrcfile equ nosrcfile-Datas
os_nosrcdata equ nosrcdata-Datas
os_farbe equ farbe-Datas
os_stellen equ stellen-Datas
os_printchunk equ printchunk-Datas
os_picdata equ picdata-Datas
os_insplural equ insplural-Datas
os_longdata equ longdata-Datas
os_nodestfile equ nodestfile-Datas
os_nodestdata equ nodestdata-Datas